<?php

namespace Sbm;

class Master
{

	public $id;

	public $name;

	public $phone;

	private $balance;

	public $description;

	public $status;

	/**
	 * Список профессий мастера
	 * @var array of integer
	 */
	public $professions;

	/**
	 * Список регионов в которых работает мастер
	 * @var array of integer
	 */
	public $regions;

	function __construct( $init_object = NULL )
	{
		$this->professions = array();
		$this->regions = array();

		if ( $init_object )
		{
			$this->Fill($init_object);
		}
	}

	function Fill( $init_array )
	{
		$this->id = empty($init_array['id']) ? NULL : (int) $init_array['id'];
		$this->name = empty($init_array['name']) ? NULL : $init_array['name'];
		$this->phone = empty($init_array['phone']) ? NULL : $init_array['phone'];
		$this->description = empty($init_array['description']) ? NULL : $init_array['description'];
		$this->time = empty($init_array['time']) ? NULL : strtotime($init_array['time']);
		$this->registered = empty($init_array['registered']) ? NULL : strtotime($init_array['registered']);

		$this->status = ( isset($init_array['status']) && $init_array['status'] ) ? true : false;

		$this->SetBalance($init_array['balance']);
	}

	public function SetBalance( &$balance )
	{
		$this->balance = $balance;
	}

	public function GetBalance()
	{
		return $this->balance;
	}

	/**
	 * Устанавливает связи между Master и Profession
	 */
	public function SetProfessions( $professions )
	{
		$this->professions = &$professions;
	}

	/**
	 * Устанавливает связи между Master и Region
	 */
	public function SetRegions( $regions )
	{
		$this->regions = &$regions;
	}

	/**
	 * Сохраняет мастера в базу данных и возвращает его номер
	 * 
	 * @param DB $db
	 * @return int
	 */
	public function Save( &$db )
	{
		$s = "REPLACE 
		             `{master}` 
		    SET 
		             `id`         = '" . $this->id . "',
		             `name`       = '" . $db->Escape($this->name) . "',
		             `phone`      = '" . $db->Escape($this->phone) . "',
		             `description`= '" . $db->Escape($this->description) . "',
		             `balance`    = '" . $this->GetBalance() . "',
		             `status`     = '" . $this->status . "'
		              ";
		$db->Query($s);
		$id = $db->InsertedId();
		$this->id = $id;
		return $id;
	}

	/**
	 * Сохраняем связи между Master и $professions в базу данных
	 * 
	 * @param DB $db
	 * @return void
	 */
	public function SaveProfessions( &$db )
	{
		// удаляем старые связи между мастером и профессией
		$s = "DELETE 
		    FROM
		             `{master_profession}`
		    WHERE
		             `master_id`     = '" . $this->id . "'";
		$db->Query($s);

		// создаём новые связи
		$s = "INSERT INTO 
		             `{master_profession}` 
		    SET 
		             `master_id`     = '" . $this->id . "',
		             `profession_id` = '%s'";
		foreach ($this->professions as $v)
		{
			$db->Query(sprintf($s, (int) $v));
		}
	}

	/**
	 * Сохраняем связи между Master и $this->regions в базу данных
	 * 
	 * @param DB $db
	 * @return void
	 */
	public function SaveRegions( &$db )
	{
		// удаляем старые связи между мастером и регионом
		$s = "DELETE 
		    FROM
		             `{master_region}`
		    WHERE
		             `master_id` = '" . $this->id . "'";
		$db->Query($s);

		// создаём новые связи
		$s = "INSERT INTO 
		             `{master_region}` 
		    SET 
		             `master_id` = '" . $this->id . "',
		             `region_id` = '%s'";
		foreach ($this->regions as $v)
		{
			$db->Query(sprintf($s, (int) $v));
		}
	}

	/**
	 * Удаляет объект и возвращает true если удалить удалось
	 * 
	 * @param DB $db
	 * @return boolean
	 */
	function Delete( &$db )
	{
		$s = "DELETE 
		    FROM 
		             `{master_region}`
		    WHERE 
		             `master_id`='" . $this->id . "'";
		$db->Query($s);

		$s = "DELETE 
		    FROM 
		             `{master_profession}`
		    WHERE 
		             `master_id`='" . $this->id . "'";
		$db->Query($s);


		$s = "DELETE 
		    FROM 
		             `{master}`
		    WHERE 
		             `id`='" . $this->id . "' 
		    LIMIT 
		             1";
		if ( $db->Query($s) )
		{
			unset($this);
			return true;
		}
		else
		{
			return false;
		}
	}

}